package cn.tedu.oss;

import cn.tedu.oss.utils.OssConstant;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.GetObjectRequest;
import org.junit.Test;
import org.springframework.context.annotation.ComponentScan;

import java.io.File;

@ComponentScan("cn.tedu")
public class Download {

    @Test
    public void  download(){
                // 填写不包含Bucket名称在内的Object完整路径，例如testfolder/exampleobject.txt。
                String Name = "https://edu-douluodalu.oss-cn-beijing.aliyuncs.com/2023/05/1741e3bd01b1194a97a552fa3fd7c4f7b4file.png";
                String objectName = "2023/05/1741e3bd01b1194a97a552fa3fd7c4f7b4file.png";
                String pathName = "D:\\localpath\\" + objectName;
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5t6RT3rzRJ4ySFuDbp76";
        String accessKeySecret = "yshYiASFfpl0Lr4uxQlDtT0OLQoqSu";
        // 填写Bucket名称，例如examplebucket。
        String bucketName = "edu-douluodalu";
        System.out.println("endpoint:" + endpoint);
        System.out.println("accessKeyId:" + accessKeyId);
        System.out.println("accessKeySecret:" + accessKeySecret);
        System.out.println("bucketName:" + bucketName);
        // 日期目录
        // 注意，这里虽然写成这种固定获取日期目录的形式，逻辑上确实存在问题，但是实际上，filePath的日期目录应该是从数据库查询的
                // 创建OSSClient实例。
                OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

                try {
                    // 下载Object到本地文件，并保存到指定的本地路径中。如果指定的本地文件存在会覆盖，不存在则新建。
                    // 如果未指定本地路径，则下载后的文件默认保存到示例程序所属项目对应本地路径中。
                    ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
                } catch (OSSException oe) {
                    System.out.println("Caught an OSSException, which means your request made it to OSS, "
                            + "but was rejected with an error response for some reason.");
                    System.out.println("Error Message:" + oe.getErrorMessage());
                    System.out.println("Error Code:" + oe.getErrorCode());
                    System.out.println("Request ID:" + oe.getRequestId());
                    System.out.println("Host ID:" + oe.getHostId());
                } catch (ClientException ce) {
                    System.out.println("Caught an ClientException, which means the client encountered "
                            + "a serious internal problem while trying to communicate with OSS, "
                            + "such as not being able to access the network.");
                    System.out.println("Error Message:" + ce.getMessage());
                } finally {
                    if (ossClient != null) {
                        ossClient.shutdown();
                    }
                }
            }

}
